上溢与下溢

← MOC|←类型转换


一、无符号整数

表示范围 位):

情况触发条件结果
上溢(Overflow)运算结果最高位进位丢失,结果
下溢(Underflow)运算结果(减法借位)最高位借位丢失,结果

无符号整数没有”溢出检测”标志位的概念,CPU 用 进位标志 CF 来指示。

示例(8 位)

  • ,存储为 ,CF = 1
  • ,存储为 ,CF = 1

二、有符号整数(补码)

表示范围 位):

情况触发条件判断方法
正溢出(上溢)两正数相加,结果结果符号位为 1(变负)
负溢出(下溢)两负数相加,结果结果符号位为 0(变正)

同符号相减不会溢出;异符号相加不会溢出。

溢出判断方法

方法一:双符号位法(变形补码)

用 2 位表示符号位:00 正,11 负;若出现 0110,则溢出。

其中 为高位符号, 为低位符号, 表示溢出。

方法二:进位判断法

为最高位(符号位)的进位, 为次高位(数值最高位)的进位,两者不同则溢出。

示例(8 位)

  • ,补码结果为 正溢出
  • ,补码结果为 负溢出

三、浮点数

浮点数由阶码 E(指数)和尾数 M(有效值)组成,溢出分两类:

3.1 阶码溢出

情况含义表现
上溢(Exponent Overflow)阶码 最大值数值超出可表示范围,结果为
下溢(Exponent Underflow)阶码 最小值数值绝对值过小,通常归零处理(flush to zero)

注意:浮点下溢 ≠ 负无穷,而是指数值太接近 0 无法表示,结果当作 0 处理。

3.2 IEEE 754 单精度(32 位)范围

区间描述
上溢,结果为
下溢,进入非规格化数(denormal)或归零

3.3 规格化与非规格化

  • 规格化数:尾数形如 ,阶码在正常范围内。
  • 非规格化数(Denormal):阶码全 0,尾数形如 ,用于填补下溢区间,精度逐渐降低(渐进下溢)。
  • 归零(Flush to Zero):忽略非规格化数,直接置 0,损失精度但速度更快。

3.4 浮点溢出处理流程

运算结果
   │
   ├─ 阶码 > 最大值 ──→ 上溢 → ±∞ / 报异常
   │
   ├─ 阶码 < 最小值 ──→ 下溢 → 非规格化数 / 归零 / 报异常
   │
   └─ 阶码正常,尾数规格化 ──→ 正常结果

四、对比总结

类型上溢(Overflow)下溢(Underflow)
无符号整数结果,CF=1结果,CF=1
有符号整数正数变负,OF=1负数变正,OF=1
浮点数趋向趋向 0(非规格化 / 归零)